package com.atguigu.day18.generic03.g1;

import org.junit.Test;

/*
泛型: 参数化类型(参考形参)
  泛型的好处: 规定输入数据类型
            避免强制转换
  泛型的位置:
        类: 泛型类   HashSet<E>
        接口: 泛型接口 interface Collection<E>
        -----
        方法: 返回值前有泛型声明的方法
          public static <T> void show(T t){}
          public <T> void eat(T t){}
       注意:
         1.泛型中的字母 任意 K T E V
           K key  V value  T type  E element

  泛型的上限: T extends 类型:
            T extends Number:  未知数据 既可以是Number 也可以是Numb的孩子
            指定多个上限 T extends 类型1 & 类型2
  泛型的擦除:
          1.泛型存在于编译时
          2.如果需要泛型没有指定泛型则使用最高类型Object
   泛型的通配符: ? 给泛型赋值  任意类型
 */
public class GenericTest {

    @Test
    public void test01() {
        Student<Integer> s1 = new Student<>("张三", 100);
        Student<Double> s2 = new Student<>("李四", 99.5);
        Student<Character> s3 = new Student<>("王五", 'A');
        Student<Object> s4 = new Student<>("张三", new Object());


        Student<Integer>[] arr1 = new Student[4];
        arr1[0] = s1;
        //arr1[1]=s2;

        Student<Object> arr2[] = new Student[4];
        arr2[0]=s4;
       // arr2[1]=s1;


        Student<?>[]arr3 = new Student[4];
        arr3[0]=s1;
        arr3[1]=s2;
        arr3[2]=s3;
        arr3[3]=s4;



    }

}
